昨天完成k8s log的來源設定,但是查找log如果都要到vector查說實在有點麻煩,因此今天就來完成最後一哩路,把log收到網頁介面上,log集中的專案非常的多,為了統一管理,就用grafana loki來統一。
grafana loki架構複雜度相當的高,機制上會運用到以下元件
依據元件,可以得到以下的架構圖
但是這樣的架構中要考慮到loki的分散運算性質,所以無狀態的Distributor、frontend、Querier會有很多個,負責讀寫資料的Ingester也可以有好多個,要能夠駕馭這樣的分布式運算就要有良好的load balnce管理讀寫的流量,然後藉由高可用又輕量的管理服務(like key-valueDB)管理loki元件的資訊,以及高可用的儲存空間和database,看起來難度高又複雜。
因此我簡化了大部分的元件,調整成下圖
不將元件拆開全部放在loki之中,由member list處理loki狀態,儲存放在minio以及boltdb-shipper,同樣透過gateway入口以及redis做cache。
我這邊在內部元件上參考了git文章https://github.com/CloudXiaobai/loki-cluster-deploy 做部署,運用其中的installation.sh並配置足夠的pv即可輕鬆安裝完成,因為我儲存空間使用minio所以s3的部分要改寫為minio的,sed就直接mark起來,調整於loki-system/loki-system/configmap.yaml內的s3: s3://minioadmin:minioadmin@minio_ip:9000/logchunks ,loki完成後就可以在grafana的datasource上選擇loki加入,之後再調整vector使用loki為sink的目標,範例如下
[sinks.out]
type = "loki"
inputs = ["in"]
endpoint = "http://localhost:3100"
labels.key = "value"
labels.key = "{{ event_field }}"
就可以正常丟到loki並且開始查詢log囉。